#include <sys_head.h>

sem_t sem1,sem2;//sem1代表奇数，sem2代表偶数
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

void *abc(void *p)
{
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        if (arr[i] % 2 == 0)
        {
            sem_wait(&sem2); // 等待信号量的值为1，如果值为0则一直在这里等，如果等到了则会把信号量的值-1
            printf("子进程:arr[%d]=%d\n", i, arr[i]);
            sem_post(&sem1); // 释放信号量，让信号量的值+1
        }
    }
}

int main(int argc, char const *argv[])
{
    // 参数2为0代表在线程间使用的信号量，参数3是当前资源的数量
    sem_init(&sem2, 0, 0);
    sem_init(&sem1,0,1);
    pthread_t pt;
    pthread_create(&pt, NULL, abc, NULL);
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        if (arr[i] % 2 != 0)
        {
            sem_wait(&sem1); // 等待信号量的值为1，如果值为0则一直在这里等，如果等到了则会把信号量的值-1
            printf("父进程:arr[%d]=%d\n", i, arr[i]);
            sem_post(&sem2); // 释放信号量，让信号量的值+1
        }
    }
    pthread_join(pt, NULL);
    printf("任务完成\n");
    return 0;
}
